<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('family_relations', function (Blueprint $table) {
            $table->id();
            $table->timestamps();

            // 关联员工
            $table->unsignedBigInteger('employee_id');

            // 关系人信息
            $table->string('name', 100); // 姓名
            $table->string('relationship_type', 20); // 关系类型：father, mother, spouse, child, sibling, etc.
            $table->string('relationship_name', 50); // 关系名称：父亲、母亲、配偶、子女、兄弟姐妹等
            $table->integer('relationship_level')->default(1); // 关系层级：1=直系，2=二级，3=三级等

            // 基本信息
            $table->string('gender', 10)->nullable(); // 性别
            $table->date('birth_date')->nullable(); // 出生日期
            $table->integer('age')->nullable(); // 年龄
            $table->string('id_card', 18)->nullable(); // 身份证号
            $table->string('phone', 20)->nullable(); // 联系电话
            $table->string('occupation', 100)->nullable(); // 职业
            $table->string('work_unit', 200)->nullable(); // 工作单位

            // 教育信息
            $table->string('education_level', 20)->nullable(); // 学历
            $table->string('school_name', 200)->nullable(); // 学校名称

            // 婚姻状况
            $table->string('marital_status', 20)->nullable(); // 婚姻状况
            $table->string('spouse_name', 100)->nullable(); // 配偶姓名
            $table->date('marriage_date')->nullable(); // 结婚日期

            // 子女信息（针对配偶）
            $table->integer('children_count')->nullable(); // 子女数量
            $table->json('children_info')->nullable(); // 子女信息（JSON格式）

            // 健康状况
            $table->string('health_status', 50)->nullable(); // 健康状况
            $table->text('health_notes')->nullable(); // 健康备注
            $table->boolean('is_deceased')->default(false); // 是否已故
            $table->date('deceased_date')->nullable(); // 去世日期

            // 居住信息
            $table->string('residence_type', 20)->nullable(); // 居住类型：together, separate, abroad
            $table->text('residence_address')->nullable(); // 居住地址
            $table->string('residence_province', 50)->nullable(); // 居住省份
            $table->string('residence_city', 50)->nullable(); // 居住城市

            // 经济状况
            $table->string('economic_status', 20)->nullable(); // 经济状况：excellent, good, average, poor
            $table->decimal('monthly_income', 10, 2)->nullable(); // 月收入
            $table->text('economic_notes')->nullable(); // 经济备注

            // 社保信息
            $table->boolean('has_social_security')->nullable(); // 是否有社保
            $table->string('social_security_type', 50)->nullable(); // 社保类型
            $table->string('social_security_number', 50)->nullable(); // 社保号

            // 紧急联系人
            $table->boolean('is_emergency_contact')->default(false); // 是否为紧急联系人
            $table->string('emergency_contact_priority', 10)->nullable(); // 紧急联系人优先级：1, 2, 3

            // 备注信息
            $table->text('notes')->nullable(); // 备注
            $table->text('special_circumstances')->nullable(); // 特殊情况

            // 验证信息
            $table->boolean('is_verified')->default(false); // 是否验证
            $table->string('verified_by', 100)->nullable(); // 验证人
            $table->date('verified_at')->nullable(); // 验证时间

            // 状态信息
            $table->boolean('is_active')->default(true); // 是否有效
            $table->integer('sort_order')->default(0); // 排序

            // 索引
            $table->index(['employee_id']);
            $table->index(['relationship_type']);
            $table->index(['relationship_level']);
            $table->index(['is_emergency_contact']);
            $table->index(['is_verified']);
            $table->index(['is_active']);
            $table->index(['is_deceased']);

            // 外键约束
            $table->foreign('employee_id')->references('id')->on('employees')->onDelete('cascade');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('family_relations');
    }
};
